﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using AccesoBD;
using System.Data.SqlClient;
using System.Globalization;
namespace PresentacionEscritorio
{
    public partial class frmRegistrarPlanAfiliacion : Form
    {
        private int idBusqueda = 0;

        public frmRegistrarPlanAfiliacion()
        {
            InitializeComponent();
        }

        public frmRegistrarPlanAfiliacion(int idBusqueda) : this()
        {
           this.idBusqueda = idBusqueda; 
        }

        private void frmRegistrarPlanAfiliacion_Load(object sender, EventArgs e)
        {
            if (idBusqueda > 0)
            {
                this.Text = "Modificar Datos Plan de Afiliación - Todo Salud";
                PlanAfiliacion p = new PlanAfiliacion();
                PlanesAfiliaciones planes = new PlanesAfiliaciones();
                p = planes.obtenerDatosPlanAfiliacion(idBusqueda);
                txtNombrePlan.Text = p.nombre;
                txtDescripcionPlan.Text = p.descripcion;
                txtPrecioInscripcion.Text = Convert.ToString(p.precioInscripcion);
                txtPrecioCuota.Text =Convert.ToString(  p.precioCuota);
                dtpFechaDesde.Value = Convert.ToDateTime(p.fechaVigenciaDesde);
                if (p.fechaVigenciaHasta != null)
                {
                    dtpFechaHasta.Checked = true;
                    dtpFechaHasta.Value = Convert.ToDateTime(p.fechaVigenciaHasta);
                }
                else
                {
                    dtpFechaHasta.Checked = false;
                }

                List<DetallePlanAfiliacion> listaDE = new List<DetallePlanAfiliacion>();
                listaDE = planes.obtnerDetallesEspecialidades(idBusqueda);
                cargarGrilla();
                foreach ( DetallePlanAfiliacion dp in listaDE)
                {
                    foreach (DataGridViewRow row in grdEspecialidades.Rows)
                    {
                        if (Convert.ToString(row.Cells["Especialidad"].Value).Equals(dp.nombreEspecialidad))
                        {
                            row.Cells["Habilitar"].Value = true;
                            //row.Cells["Especialidad"].Value = dp.nombreEspecialidad;
                            row.Cells["PrecioAfiliadoE"].Value = dp.precioAfiliado;
                            row.Cells["PrecioMedicoE"].Value = dp.precioMedico;
                            row.Cells["FechaDesdeE"].Value = dp.fechaVigenciaDesde;
                            row.Cells["FechaHastaE"].Value = dp.fechaVigenciaHasta;
                        }
                    }
                }

                List<DetallePlanAfiliacion> listaDP = new List<DetallePlanAfiliacion>();
                listaDP = planes.obtnerDetallesPracticas(idBusqueda);
                foreach (DetallePlanAfiliacion dp in listaDP)
                {
                    foreach (DataGridViewRow row in grdPracticas.Rows)
                    {
                        if (Convert.ToString(row.Cells["Practica"].Value).Equals(Convert.ToString(dp.nombrePractica)))
                        {
                            row.Cells["HabilitarP"].Value = true;
                            //row.Cells["Practica"].Value = dp.nombrePractica;
                            row.Cells["PrecioAfiliadoP"].Value = dp.precioAfiliado;
                            row.Cells["PrecioMedicoP"].Value = dp.precioMedico;
                            row.Cells["FechaDesdeP"].Value = dp.fechaVigenciaDesde;
                            row.Cells["FechaHastaP"].Value = dp.fechaVigenciaHasta;
                        }
                    }
                }


            }
            else
            {
                cargarGrilla();
                dtpFechaHasta.MinDate = dtpFechaDesde.Value.AddMonths(1);
                dtpFechaHasta.Checked = false;
            }
            
        }

        public void cargarGrilla()
        {
            
            SqlConnection conexion = DB.Conectar();
            SqlCommand sqlcmd = new SqlCommand("SELECT nombre, precioLista FROM Especialidad", conexion);
            SqlDataReader dr = sqlcmd.ExecuteReader();
            int i = 0;
            while (dr.Read())
            {
                i = grdEspecialidades.Rows.Add();
                grdEspecialidades.Rows[i].Cells["Especialidad"].Value = dr["nombre"].ToString();
                grdEspecialidades.Rows[i].Cells["PrecioListaE"].Value = dr["precioLista"].ToString();
            }
            grdEspecialidades.AllowUserToAddRows = false;
            for (int f = 0; f < grdEspecialidades.RowCount; f++)
            {
                grdEspecialidades.Rows[f].Cells["PrecioAfiliadoE"].ReadOnly = true;
                grdEspecialidades.Rows[f].Cells["PrecioMedicoE"].ReadOnly = true;
                grdEspecialidades.Rows[f].Cells["FechaDesdeE"].ReadOnly = true;
                grdEspecialidades.Rows[f].Cells["FechaHastaE"].ReadOnly = true;
                grdEspecialidades.Columns["FechaDesdeE"].DefaultCellStyle.Format = "d";
                grdEspecialidades.Columns["FechaHastaE"].DefaultCellStyle.Format = "d";
            }

            SqlConnection conexion2 = DB.Conectar();
            SqlCommand sqlcmd2 = new SqlCommand("SELECT nombre, precioLista FROM Practica", conexion2);
            SqlDataReader dr2 = sqlcmd2.ExecuteReader();
            int i2 = 0;
            while (dr2.Read())
            {
                i2 = grdPracticas.Rows.Add();
                grdPracticas.Rows[i2].Cells["Practica"].Value = dr2["nombre"].ToString();
                grdPracticas.Rows[i2].Cells["PrecioListaP"].Value = dr2["precioLista"].ToString();
            }
            grdPracticas.AllowUserToAddRows = false;
            for (int f = 0; f < grdPracticas.RowCount; f++)
            {
                grdPracticas.Rows[f].Cells["PrecioAfiliadoP"].ReadOnly = true;
                grdPracticas.Rows[f].Cells["PrecioMedicoP"].ReadOnly = true;
                grdPracticas.Rows[f].Cells["FechaDesdeP"].ReadOnly = true;
                grdPracticas.Rows[f].Cells["FechaHastaP"].ReadOnly = true;
                grdPracticas.Columns["FechaDesdeP"].DefaultCellStyle.Format = "dd/MM/yyyy";
                grdPracticas.Columns["FechaHastaP"].DefaultCellStyle.Format = "dd/MM/yyyy";
            }
        }

        private void grdEspecialidades_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdEspecialidades.Columns["Habilitar"])
            {
               
                if (true)
                {
                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioAfiliadoE"].ReadOnly = false;
                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioMedicoE"].ReadOnly = false;
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaDesdeE"].ReadOnly = false;
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaHastaE"].ReadOnly = false;

                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioAfiliadoE"].Value = "";
                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioMedicoE"].Value = "";
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaDesdeE"].Value = dtpFechaDesde.Value.Date;
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaHastaE"].Value = "";
                }
                else
                {
                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioAfiliadoE"].ReadOnly = true;
                    grdEspecialidades.Rows[e.RowIndex].Cells["PrecioMedicoE"].ReadOnly = true;
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaDesdeE"].ReadOnly = true;
                    grdEspecialidades.Rows[e.RowIndex].Cells["FechaHastaE"].ReadOnly = true;
                }
            }
        }

        private void grdPracticas_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdPracticas.Columns["HabilitarP"])
            {

                if (true)
                {
                    grdPracticas.Rows[e.RowIndex].Cells["PrecioAfiliadoP"].ReadOnly = false;
                    grdPracticas.Rows[e.RowIndex].Cells["PrecioMedicoP"].ReadOnly = false;
                    grdPracticas.Rows[e.RowIndex].Cells["FechaDesdeP"].ReadOnly = false;
                    grdPracticas.Rows[e.RowIndex].Cells["FechaHastaP"].ReadOnly = false;

                    grdPracticas.Rows[e.RowIndex].Cells["PrecioAfiliadoP"].Value = "";
                    grdPracticas.Rows[e.RowIndex].Cells["PrecioMedicoP"].Value = "";
                    grdPracticas.Rows[e.RowIndex].Cells["FechaDesdeP"].Value = dtpFechaDesde.Value.Date;
                    grdPracticas.Rows[e.RowIndex].Cells["FechaHastaP"].Value = "";
                }
                else
                {
                    grdPracticas.Rows[e.RowIndex].Cells["PrecioAfiliadoP"].ReadOnly = true;
                    grdPracticas.Rows[e.RowIndex].Cells["PrecioMedicoP"].ReadOnly = true;
                    grdPracticas.Rows[e.RowIndex].Cells["FechaDesdeP"].ReadOnly = true;
                    grdPracticas.Rows[e.RowIndex].Cells["FechaHastaP"].ReadOnly = true;
                }
            }
        }

        private bool validarPrecio(string valorCelda)
        {
            float p;
            bool res = float.TryParse(valorCelda, out p);
            return res;
        }

        private bool validarFecha(string valorCelda)
        {
            DateTime f;
            bool res = DateTime.TryParse(valorCelda, out f);
            return res;

        }

        private void grdEspecialidades_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            //Para el precio del afiliado
            bool res;
            if (grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdEspecialidades.Columns["PrecioAfiliadoE"] && grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
                res = validarPrecio(e.FormattedValue.ToString());

                if (!res)
                {
                    MessageBox.Show("El precio no es correcto");
                    e.Cancel = true;
                }
                else
                {
                    int precioLista = Convert.ToInt32(grdEspecialidades.Rows[e.RowIndex].Cells["PrecioListaE"].Value.ToString());
                    int precioAfiliado = Convert.ToInt32(e.FormattedValue.ToString());
                    if(precioLista < precioAfiliado)
                    {
                        MessageBox.Show("El precio de afiliado no puede ser mayor al precio de lista");
                        e.Cancel = true;
                    }
                }

            }

            //Para el precio del medico
            if (grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdEspecialidades.Columns["PrecioMedicoE"] && grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
                
                res = validarPrecio(e.FormattedValue.ToString());
                if (!res)
                {
                    MessageBox.Show("El precio no es correcto");
                    e.Cancel = true;
                }
                else
                {
                    int precioAfiliado = Convert.ToInt32(grdEspecialidades.Rows[e.RowIndex].Cells["PrecioAfiliadoE"].Value.ToString());
                    int precioMedico = Convert.ToInt32(e.FormattedValue.ToString());
                    if(precioAfiliado < precioMedico)
                    {
                        MessageBox.Show("El precio de médico no puede ser mayor que el precio de afiliado");
                    e.Cancel = true;
                    }
                }

            }

            //para la fecha desde
            if (grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdEspecialidades.Columns["FechaDesdeE"] && grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
                DateTime dateValue;
                CultureInfo es = new CultureInfo("es-ES");
                string fecha = e.FormattedValue.ToString();
                if (!DateTime.TryParseExact(fecha, "dd/MM/yyyy", es, DateTimeStyles.None, out dateValue))
                {
                        
                    MessageBox.Show("La fecha no es correcta");
                    e.Cancel = true;
                }
                else
                {
                    DateTime fechaDesdePlan = Convert.ToDateTime(dtpFechaDesde.Value.Date);
                    DateTime fechaDesdeEspecialidad = Convert.ToDateTime(e.FormattedValue.ToString());
                    if (fechaDesdePlan > fechaDesdeEspecialidad)
                    {
                        MessageBox.Show("La fecha no puede ser menor a la fecha vigencia desde del plan");
                        e.Cancel = true;
                    }
                }

                if (dtpFechaHasta.Checked == true)
                {
                    DateTime fechaHastaPlan = Convert.ToDateTime(dtpFechaHasta.Value.Date);
                    DateTime fechaDesdeEspecialidad = Convert.ToDateTime(e.FormattedValue.ToString());
                    if (fechaHastaPlan < fechaDesdeEspecialidad)
                    {
                        MessageBox.Show("La fecha no puede ser mayor a la fecha vigencia hasta del plan");
                        e.Cancel = true;
                    }
                }

            }
            //para la fecha hasta
            //if (grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdEspecialidades.Columns["FechaHastaE"] && grdEspecialidades.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            //{
            //    DateTime dateValue;
            //    CultureInfo es = new CultureInfo("es-ES");
            //    string fecha = e.FormattedValue.ToString();
            //    if (!DateTime.TryParseExact(fecha, "dd/MM/yyyy", es, DateTimeStyles.None, out dateValue))
            //    {

            //        MessageBox.Show("La fecha no es correcta");
            //        e.Cancel = true;
            //    }
            //    else
            //    {
            //        DateTime fechaDesdeEspecialidad = Convert.ToDateTime(grdEspecialidades.Rows[e.RowIndex].Cells["FechaDesdeE"].Value);
            //        DateTime fechaHastaEspecialidad = Convert.ToDateTime(e.FormattedValue.ToString());
            //        if(fechaHastaEspecialidad < fechaDesdeEspecialidad)
            //        {
            //            MessageBox.Show("La fecha no puede ser menor a la fecha vigencia desde de la especialidad");
            //            e.Cancel = true;
            //        }
            //    }
            //    if (dtpFechaHasta.Checked == true)
            //    {
            //        DateTime fechaHastaPlan = Convert.ToDateTime(dtpFechaHasta.Value.Date);
            //        DateTime fechaHastaEspecialidad = Convert.ToDateTime(e.FormattedValue.ToString());
            //        if (fechaHastaPlan < fechaHastaEspecialidad)
            //        {
            //            MessageBox.Show("La fecha no puede ser mayor a la fecha vigencia hasta del plan");
            //            e.Cancel = true;
            //        }
                //}

            //}
        }

        private void grdPracticas_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            //Para el precio del afiliado
            bool res;
            if (grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdPracticas.Columns["PrecioAfiliadoP"] && grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
                res = validarPrecio(e.FormattedValue.ToString());
                
                if (!res )
                {
                    MessageBox.Show("El precio no es correcto");
                    e.Cancel = true;
                }
                else
                {
                    int precioLista = Convert.ToInt32(grdPracticas.Rows[e.RowIndex].Cells["PrecioListaP"].Value.ToString());
                    int precioAfiliado = Convert.ToInt32(e.FormattedValue.ToString());
                    if(precioLista < precioAfiliado)
                    {
                        MessageBox.Show("El precio afiliado no puede ser mayor al precio de lista");
                    e.Cancel = true;
                    }
                }

            }

            //Para el precio del medico
            if (grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdPracticas.Columns["PrecioMedicoP"] && grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
               
                res = validarPrecio(e.FormattedValue.ToString());
                if (!res )
                {
                    MessageBox.Show("El precio no es correcto");
                    e.Cancel = true;
                }
                else
                {
                    int precioAfiliado = Convert.ToInt32(grdPracticas.Rows[e.RowIndex].Cells["PrecioAfiliadoP"].Value.ToString());
                    int precioMedico = Convert.ToInt32(e.FormattedValue.ToString());
                    if( precioAfiliado < precioMedico)
                    {
                        MessageBox.Show("El precio medico no puede ser mayor al precio afiliado");
                        e.Cancel = true;
                    }

                }

            }

            //para la fecha desde
            if (grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdPracticas.Columns["FechaDesdeP"] && grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            {
                DateTime dateValue;
                CultureInfo es = new CultureInfo("es-ES");
                string fecha = e.FormattedValue.ToString();
                if (!DateTime.TryParseExact(fecha, "dd/MM/yyyy", es, DateTimeStyles.None, out dateValue))
                {

                    MessageBox.Show("La fecha no es correcta");
                    e.Cancel = true;
                }
                else
                {
                    DateTime fechaDesdePlan = Convert.ToDateTime(dtpFechaDesde.Value.Date);
                    DateTime fechaDesdePractica = Convert.ToDateTime(e.FormattedValue.ToString());
                    if(fechaDesdePlan > fechaDesdePractica)
                    {
                        MessageBox.Show("La fecha no puede ser menor a la fecha vigencia desde del plan");
                        e.Cancel = true;
                    }

                }
                if (dtpFechaHasta.Checked == true)
                {
                    DateTime fechaHastaPlan = Convert.ToDateTime(dtpFechaHasta.Value.Date);
                    DateTime fechaDesdePractica = Convert.ToDateTime(e.FormattedValue.ToString());
                    if (fechaHastaPlan < fechaDesdePractica)
                    {
                        MessageBox.Show("La fecha no puede ser mayor a la fecha vigencia hasta del plan");
                        e.Cancel = true;
                    }
                }

            }
            //para la fecha hasta
            //if (grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn == grdPracticas.Columns["FechaHastaP"] && grdPracticas.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == false)
            //{
            //    DateTime dateValue;
            //    CultureInfo es = new CultureInfo("es-ES");
            //    string fecha = e.FormattedValue.ToString();
            //    if (!DateTime.TryParseExact(fecha, "dd/MM/yyyy", es, DateTimeStyles.None, out dateValue))
            //    {

            //        MessageBox.Show("La fecha no es correcta");
            //        e.Cancel = true;
            //    }
            //    else
            //    {
            //        DateTime fechaDesdePractica = Convert.ToDateTime(grdPracticas.Rows[e.RowIndex].Cells["FechaDesdeP"].Value);
            //        DateTime fechaHastaPractica = Convert.ToDateTime(e.FormattedValue.ToString());
            //        if(fechaHastaPractica < fechaDesdePractica)
            //        {
            //            MessageBox.Show("La fecha no puede ser menor a la fecha vigencia desde de la practica");
            //            e.Cancel = true;
            //        }
            //    }
            //    if (dtpFechaHasta.Checked == true)
            //    {
            //        DateTime fechaHastaPlan = Convert.ToDateTime(dtpFechaHasta.Value.Date);
            //        DateTime fechaHastaPractica = Convert.ToDateTime(e.FormattedValue.ToString());
            //        if (fechaHastaPlan < fechaHastaPractica)
            //        {
            //            MessageBox.Show("La fecha no puede ser mayor a la fecha vigencia hasta del plan");
            //            e.Cancel = true;
            //        }
            //    }

            //}
        }

        private void chkTodasEspecialidades_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTodasEspecialidades.Checked == true)
            {
                foreach (DataGridViewRow row in grdEspecialidades.Rows)
                {
                    row.Cells["Habilitar"].Value = true;
                    row.Cells["PrecioAfiliadoE"].ReadOnly = false;
                    row.Cells["PrecioMedicoE"].ReadOnly = false;
                    row.Cells["FechaDesdeE"].ReadOnly = false;
                    row.Cells["FechaHastaE"].ReadOnly = false;

                    row.Cells["FechaDesdeE"].Value = dtpFechaDesde.Value.Date;
                }
            }
            else
            {
                foreach (DataGridViewRow row in grdEspecialidades.Rows)
                {
                    row.Cells["Habilitar"].Value = false;
                    row.Cells["PrecioAfiliadoE"].ReadOnly = true;
                    row.Cells["PrecioMedicoE"].ReadOnly = true;
                    row.Cells["FechaDesdeE"].ReadOnly = true;
                    row.Cells["FechaHastaE"].ReadOnly = true;
                }
            }
        }

        private void chkTodasPracticas_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTodasPracticas.Checked == true)
            {
                foreach (DataGridViewRow row in grdPracticas.Rows)
                {
                    row.Cells["HabilitarP"].Value = true;
                    row.Cells["PrecioAfiliadoP"].ReadOnly = false;
                    row.Cells["PrecioMedicoP"].ReadOnly = false;
                    row.Cells["FechaDesdeP"].ReadOnly = false;
                    row.Cells["FechaHastaP"].ReadOnly = false;

                    row.Cells["FechaDesdeP"].Value = dtpFechaDesde.Value.Date;
                }
            }
            else
            {
                foreach (DataGridViewRow row in grdPracticas.Rows)
                {
                    row.Cells["HabilitarP"].Value = false;
                    row.Cells["PrecioAfiliadoP"].ReadOnly = true;
                    row.Cells["PrecioMedicoP"].ReadOnly = true;
                    row.Cells["FechaDesdeP"].ReadOnly = true;
                    row.Cells["FechaHastaP"].ReadOnly = true;
                }
            }
        }

        private void txtPrecioInscripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtPrecioCuota_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            Boolean vigente = false; 
            if (validarCampos())
            {
                
                int cont = 0;
                Boolean res = false;

                //Para saber si hay un plan con ese nombre y todavia vigente
                PlanesAfiliaciones pl = new PlanesAfiliaciones();

                if (idBusqueda > 0)
                {
                    pl.modificar(idBusqueda);
                }
                else
                {
                    Boolean vigencia;
                    vigencia = pl.planVigente(txtNombrePlan.Text, dtpFechaDesde.Value.Date);
                    if (vigencia == false)
                    {
                        MessageBox.Show("Existe un plan con ese nombre que todavia esta vigente", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        limpiar();
                        vigencia = true;
                    }
                }
                List<DetallePlanAfiliacion> listDP = null;
                listDP = new List<DetallePlanAfiliacion>();

                foreach (DataGridViewRow row in grdEspecialidades.Rows)
                {
                    if (Convert.ToBoolean(row.Cells["Habilitar"].Value))
                    {
                        DetallePlanAfiliacion dp = new DetallePlanAfiliacion();

                        dp.idEspecialidad = pl.codigoEspecialidad(row.Cells["Especialidad"].Value.ToString());
                        dp.idPractica = null;
                        dp.precioAfiliado = float.Parse(row.Cells["PrecioAfiliadoE"].Value.ToString());
                        dp.precioMedico = float.Parse(row.Cells["PrecioMedicoE"].Value.ToString());
                        dp.fechaVigenciaDesde = Convert.ToDateTime(row.Cells["FechaDesdeE"].Value);
                        if (row.Cells["FechaHastaE"].Value == null)
                            dp.fechaVigenciaHasta = null;
                        else
                            dp.fechaVigenciaHasta = Convert.ToDateTime(row.Cells["FechaHastaE"].Value);
                        dp.nombreEspecialidad = row.Cells["Especialidad"].Value.ToString();
                        dp.nombrePractica = null;

                        listDP.Add(dp);
                        cont++; 
                    }
                }
  
                foreach (DataGridViewRow row in grdPracticas.Rows)
                {
                    if (Convert.ToBoolean(row.Cells["HabilitarP"].Value))
                    {
                        DetallePlanAfiliacion dp = new DetallePlanAfiliacion();

                        dp.idEspecialidad = null;
                        dp.idPractica = pl.codigoPractica(row.Cells["Practica"].Value.ToString());
                        dp.precioAfiliado = float.Parse(row.Cells["PrecioAfiliadoP"].Value.ToString());
                        dp.precioMedico = float.Parse(row.Cells["PrecioMedicoP"].Value.ToString());
                        dp.fechaVigenciaDesde = Convert.ToDateTime(row.Cells["FechaDesdeP"].Value);
                        if (row.Cells["FechaHastaP"].Value == null)
                            dp.fechaVigenciaHasta = null;
                        else
                            dp.fechaVigenciaHasta = Convert.ToDateTime(row.Cells["FechaHastaP"].Value);
                        dp.nombreEspecialidad = null;
                        dp.nombrePractica = row.Cells["Practica"].Value.ToString();

                        listDP.Add(dp);
                        cont++;
                    }
                }

                if (cont > 0)
                {
                    //crear Plan
                    PlanAfiliacion p = new PlanAfiliacion();
                    p.nombre = txtNombrePlan.Text;
                    p.descripcion = txtDescripcionPlan.Text;
                    p.precioInscripcion = float.Parse(txtPrecioInscripcion.Text);
                    p.precioCuota = float.Parse(txtPrecioCuota.Text);
                    p.fechaVigenciaDesde = dtpFechaDesde.Value.Date;
                    if (dtpFechaHasta.Checked == true)
                    {
                        p.fechaVigenciaHasta = dtpFechaHasta.Value;
                    }
                    else
                    {
                        p.fechaVigenciaHasta = null;
                    }

                    //crear el acceso a datos
                    PlanesAfiliaciones pa = new PlanesAfiliaciones();
                    res = pa.registrarPlanAfiliacion(p, listDP);
                }
                else
                {
                    if (vigente == false)
                    {
                        MessageBox.Show("Debe cargar alguna especialidad o práctica", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                if (res)
                {
                    if (idBusqueda > 0)
                    {
                        MessageBox.Show("Se modifico correctamente el plan", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        limpiar();
                        idBusqueda = 0;
                    }
                    else
                    {
                        MessageBox.Show("Se registro correctamente el plan", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        limpiar();
                    }
                }
                else
                {
                    if (vigente == false)
                    {
                        MessageBox.Show("No se registro correctamente el plan", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }

            }
        }

        public void limpiar()
        {
            txtNombrePlan.Text = "";
            txtDescripcionPlan.Text = "";
            txtPrecioInscripcion.Text = "";
            txtPrecioCuota.Text = "";
            dtpFechaDesde.Value = DateTime.Now;
            dtpFechaHasta.Value = DateTime.Now.AddMonths(1);
            dtpFechaHasta.Checked = false;
            foreach (DataGridViewRow row in grdEspecialidades.Rows)
            {
                row.Cells["Habilitar"].Value = false;
                row.Cells["PrecioAfiliadoE"].Value = "";
                row.Cells["PrecioMedicoE"].Value = "";
                row.Cells["fechaDesdeE"].Value = ""; 
                row.Cells["fechaHastaE"].Value = "";
            }
            foreach (DataGridViewRow row in grdPracticas.Rows)
            {
                row.Cells["HabilitarP"].Value = false;
                row.Cells["PrecioAfiliadoP"].Value = "";
                row.Cells["PrecioMedicoP"].Value = "";
                row.Cells["fechaDesdeP"].Value = "";
                row.Cells["fechaHastaP"].Value = "";
            }
        }

        public Boolean validarCampos()
        {
            Boolean res = true;
            if (txtNombrePlan.Text == "")
            {
                res = false;
                MessageBox.Show("Debe ingresar un nombre de plan", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNombrePlan.Focus();            
            }
            if (txtPrecioCuota.Text == "")
            {
                res = false;
                MessageBox.Show("Debe ingresar un precio de cuota", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtPrecioCuota.Focus();
            }
            return res;
        }

        private void dtpFechaDesde_ValueChanged(object sender, EventArgs e)
        {
            //dtpFechaHasta.MinDate = dtpFechaDesde.Value.AddMonths(1);
            //dtpFechaHasta.Checked = false;

        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiar();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (idBusqueda > 0)
            {
                Boolean actualizar = true;
                frmConsultarPlanAfiliacion frm = new frmConsultarPlanAfiliacion(actualizar);
            }
            else
            {
                DialogResult result = MessageBox.Show("Seguro que desea salir?", "Aviso", MessageBoxButtons.YesNo);
                if (result == DialogResult.Yes)
                    this.Close();
            }
        }

        private void grdEspecialidades_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            
        }


    }

}
